오브젝트 - 코드로 이해하는 객체지향 설계 - 조영호

README

이 문서는 단순히 책을 읽어가며 인상깊었던 내용, 궁금한 질문등을 잠깐 계류시키는 용도로 사용할 겁니다. 깨달은 점이나 질문을 구체화 하기 위해선 반드시 별도의 문서를 작성하고 이 문서에 레퍼런스를 걸어주세요.

Scrap

GRASP (General Responsibility Assignment Software Patterns)

정보전문가(Information Expert)

책임을 완수할 가능성이 높기 때문에 정보전문가에게 책임을 할당하는 것이 유리. 여기에서 말하는 정보란, 책임에 필요한 값, 정보를 알고 있는 다른 객체와의 관계, 계산식 보유 등을 의미한다. 따라서 이런 정보전문가 객체에게 책임을 할당하면 추가적인 맥락을 전달할 필요가 줄어들어 결합도가 줄어들게 된다.

창조자(Creator)

책임의 종류가 "생성"일 경우 창조자에게 해당 책임을 할당하라. 어떤 객체가 다른 객체를 사용, 초기화, 포함해야 할 일이 있을때 고려할 수 있다.

낮은 결합도(Low Coupling)

객체 후보군들에 책임을 하나씩 할당해보았을 때 결합도를 계산해보라. 결합도의 총합이 가장 작은 객체에게 책임을 할당하라.

높은 응집도(High Cohesion)

객체가 너무 많은 책임을 지지 않도록 조절하라. god 객체가 탄생하게 되면 모든 관심사와 인지부하가 그 객체에게 쏠리게 된다.

응집도 계산법 (Low Cohesion of Methods)

LCOM|500

아래 계산 결과인 LCOM 값이 높을수록 응집도는 떨어진다고 이해하면 된다.

  1. 클래스가 가지고 있는 모든 메서드와 클래스의 프로퍼티(멤버변수)의 리스트를 식별한다.
  2. 각 메서드가 사용하고 있는 프로퍼티의 관계도를 그래프로 그린다.
  3. 그래프를 가지고 서로소 집합 (disjoint set)을 계산한다. 쉽게 말해, 공통되는 쌍이 없는 집합들을 계산한다.
  4. 서로소 집합의 수가 하나뿐이면 0, 이외의 경우는 1을 뺀 값이 곧 LCOM이다.

Example

∴ LCOM = 2 - 1 = 1